let log = console.log; // 如果在项目的APP.vue文件中的onlaunch中设置 console.log = ()=> {} 则在此也不会有打印信息
//log = ()=>{};	// 打开注释则该插件不会打印任何信息
let _app = {
    //交互控制
    log (t) {
        log(t);
    }, // 打印控制,
    showLoading (msg, ifmask) {
        uni.showLoading({
            title: msg,
            mask: ifmask || false
        })
    },
    hideLoading () {
        uni.hideLoading();
    },
    showToast (msg, icon) {
        uni.showToast({
            title: msg,
            icon: icon || 'none'
        })
    },
    getPosterUrl (objs) { // 后端获取背景图的url路径方法
        let {backgroundImage, type, formData} = objs;
        return new Promise((rs, rj) => {
            let image;
            if (backgroundImage) {
                image = backgroundImage;
            } else {
                switch (type) { //根据type获取背景图, 一般要改成request获取
                    case 1:
                        image = '';
                        break;
                    default:
                        image = '';
                        break;
                }
            }
            if (image) {
                rs(image); // resolve图片的路径
            } else {
                rj('背景图片路径不存在');
            }
        })
    },


    //下面一般不用动他
    shareTypeListSheetArray: {
        array: [0, 1, 2, 3, 4, 5]
    }, // 分享类型 0-图文链接 1-纯文字 2-纯图片 3-音乐 4-视频 5-小程序
    isArray (arg) {
        return Object.prototype.toString.call(arg) === '[object Array]';
    },
    isObject (arg) {
        return Object.prototype.toString.call(arg) === '[object Object]';
    },
    isPromise (obj) {
        return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
    },
    isNull (arg) {
        return arg === null;
    },
    isUndefined (arg) {
        return arg === undefined;
    },
    isUndef (arg) {
        return arg === undefined;
    },
    isNotNull_string (arg) {
        return arg !== null && arg !== undefined && arg !== '';
    },
    isFn (fn) {
        return fn && typeof fn === 'function';
    },
    getStorage (key, scb, fcb) {
        uni.getStorage({
            key,
            success: function (res) {
                if (res.data && res.data != "") {
                    if (scb) scb(res.data);
                } else {
                    if (fcb) fcb();
                }
            },
            fail: function () {
                if (fcb) fcb();
            }
        })
    },
    setStorage (key, data) {
        log('设置缓存')
        log('key：' + key)
        log('data：' + JSON.stringify(data));
        uni.setStorage({
            key,
            data
        })
    },
    setStorageSync (key, data) {
        uni.setStorageSync(key, data);
    },
    getStorageSync (key) {
        return uni.getStorageSync(key);
    },
    clearStorageSync () {
        uni.clearStorageSync();
    },
    removeStorageSync (key) {
        uni.removeStorageSync(key);
    },
    getImageInfo (url, cb, fcb) {
        url = checkMPUrl(url);
        uni.getImageInfo({
            src: url,
            success (res) {
                if (cb && typeof (cb) == 'function') cb(res);
            },
            fail (err) {
                if (fcb && typeof (fcb) == 'function') fcb(err);
            }
        })
    },
    downloadFile (url, cb) {
        url = checkMPUrl(url);
        uni.downloadFile({
            url,
            success (res) {
                if (cb && typeof (cb) == 'function') cb(res);
            }
        })
    },
    downloadFile_PromiseFc (url) {
        return new Promise((rs, rj) => {
            if (url.substring(0, 4) !== 'http') {
                rs(url);
            } else {
                url = checkMPUrl(url);
                log('url:' + url);
                uni.downloadFile({
                    url,
                    success (res) {
                        if (res && res.tempFilePath)
                            rs(res.tempFilePath);
                        else
                            rj('not find tempFilePath');
                    },
                    fail (err) {
                        rj(err);
                    }
                })
            }
        });
    },
    saveFile (url) {
        uni.saveFile({
            tempFilePath: url,
            success (res) {
                log('保存成功:' + JSON.stringify(res))
            }
        })
    },
    downLoadAndSaveFile_PromiseFc (url) {
        return new Promise((rs, rj) => {
            log('准备下载并保存图片:' + url);
            if (url.substring(0, 4) === 'http') {
                url = checkMPUrl(url);
                uni.downloadFile({
                    url,
                    success (d_res) {
                        log('下载背景图成功：' + JSON.stringify(d_res));
                        if (d_res && d_res.tempFilePath) {

                            // #ifdef H5
                            rs(d_res.tempFilePath);
                            // #endif

                            // #ifndef H5
                            uni.saveFile({
                                tempFilePath: d_res.tempFilePath,
                                success (s_res) {
                                    log('保存背景图成功:' + JSON.stringify(s_res));
                                    if (s_res && s_res.savedFilePath)
                                        rs(s_res.savedFilePath);
                                    else
                                        rs(d_res.tempFilePath);
                                },
                                fail (err) {
                                    rs(d_res.tempFilePath);
                                }
                            })
                            // #endif

                        } else {
                            rj('not find tempFilePath');
                        }
                    },
                    fail (err) {
                        rj(err);
                    }
                })
            } else {
                rs(url);
            }
        })
    },
    checkFile_PromiseFc (url) {
        return new Promise((rs, rj) => {
            uni.getSavedFileList({
                success (res) {
                    let d = res.fileList;
                    let index = d.findIndex(item => {
                        return item.filePath === url;
                    })
                    rs(index);
                },
                fail (err) {
                    rj(err);
                }
            })
        });
    },
    removeSavedFile (path) {
        uni.getSavedFileList({
            success (res) {
                let d = res.fileList;
                let index = d.findIndex(item => {
                    return item.filePath === path;
                });
                if (index >= 0)
                    uni.removeSavedFile({
                        filePath: path
                    })
            }
        })
    },
    fileNameInPath (path) {
        let s = path.split("/");
        return s[s.length - 1];
    },
    getImageInfo_PromiseFc (imgPath) {
        return new Promise((rs, rj) => {
            log('准备获取图片信息:' + imgPath);
            imgPath = checkMPUrl(imgPath);
            uni.getImageInfo({
                src: imgPath,
                success: res => {
                    log('获取图片信息成功:' + JSON.stringify(res));
                    rs(res);
                },
                fail: err => {
                    log('获取图片信息失败:' + JSON.stringify(err));
                    rj(err)
                }
            })
        });
    },
    previewImage (urls) {
        if (typeof (urls) == 'string')
            urls = [urls];
        uni.previewImage({
            urls,
        })
    },
    actionSheet (obj, cb) {
        let sheetArray = [];
        for (let i = 0; i < obj.array.length; i++) {
            switch (obj.array[i]) {
                case 'sinaweibo':
                    sheetArray[i] = '新浪微博';
                    break;
                case 'qq':
                    sheetArray[i] = 'QQ';
                    break;
                case 'weixin':
                    sheetArray[i] = '微信';
                    break;
                case 'WXSceneSession':
                    sheetArray[i] = '微信好友';
                    break;
                case 'WXSenceTimeline':
                    sheetArray[i] = '微信朋友圈';
                    break;
                case 'WXSceneFavorite':
                    sheetArray[i] = '微信收藏';
                    break;
                case 0:
                    sheetArray[i] = '图文链接';
                    break;
                case 1:
                    sheetArray[i] = '纯文字';
                    break;
                case 2:
                    sheetArray[i] = '纯图片';
                    break;
                case 3:
                    sheetArray[i] = '音乐';
                    break;
                case 4:
                    sheetArray[i] = '视频';
                    break;
                case 5:
                    sheetArray[i] = '小程序';
                    break;
                default:
                    break;
            }
        }
        this.showActionSheet(sheetArray, cb);
    },
    showActionSheet (sheetArray, cb) {
        uni.showActionSheet({
            itemList: sheetArray,
            success: (e) => {
                if (cb && typeof (cb) == 'function') cb(e.tapIndex);
            }
        })
    },
    getProvider (type, cb, sheet) {
        let _this = this;
        uni.getProvider({
            service: type,
            success: function (res) {
                if (sheet) {
                    let obj = {};
                    obj.array = res.provider;
                    _this.actionSheet(obj, function (index) {
                        if (cb && typeof (cb) == "function") cb(res.provider[index]);
                    });
                } else {
                    if (type == 'payment') {
                        let providers = res.provider;
                        let payTypeArray = [];
                        for (let i = 0; i < providers.length; i++) {
                            if (providers[i] == 'wxpay') {
                                payTypeArray[i] = {
                                    name: '微信支付',
                                    value: providers[i],
                                    img: '/static/image/wei.png'
                                };
                            } else if (providers[i] == 'alipay') {
                                payTypeArray[i] = {
                                    name: "支付宝支付",
                                    value: providers[i],
                                    img: '/static/image/ali.png'
                                };
                            }
                        }
                        if (cb && typeof (cb) == "function") cb(payTypeArray);
                    } else {
                        if (cb && typeof (cb) == "function") cb(res);
                    }
                }
            },
        })
    },
    // #ifdef APP-PLUS
    getShare (providerName, WXScene, shareType, title, summary, href, imageUrl, miniProgramObj, mediaUrl, scb, fcb) { //miniProgram: {path: '', type: 0, webUrl: ''}
        let _this = this;
        if (typeof (shareType) == 'number' && !isNaN(shareType) && shareType >= 0) {
            _this.readyShare(providerName, WXScene, shareType, title, summary, href, imageUrl, miniProgramObj, mediaUrl, scb,
                fcb);
        } else {
            _this.actionSheet(_this.shareTypeListSheetArray, function (index) {
                _this.readyShare(providerName, WXScene, _this.shareTypeListSheetArray.array[index], title, summary, href,
                    imageUrl, miniProgramObj, mediaUrl, scb, fcb);
            });
        }
    },
    readyShare (providerName, WXScene, shareType, title, summary, href, imageUrl, miniProgramObj, mediaUrl, scb, fcb) {
        let _this = this;
        let shareObjData = {};
        switch (shareType) {
            case 0:
                shareObjData = {
                    href: href,
                    summary: summary,
                    imageUrl: imageUrl
                };
                break;
            case 1:
                shareObjData = {
                    summary: summary,
                    href: href
                };
                break;
            case 2:
                shareObjData = {
                    imageUrl: imageUrl
                };
                break;
            case 3:
                if (mediaUrl) {
                    _this.showToast('暂不支持此分享类型');
                    return;
                }
                ;
                shareObjData = {
                    mediaUrl: mediaUrl
                };
                break;
            case 4:
                if (mediaUrl) {
                    _this.showToast('暂不支持此分享类型');
                    return;
                }
                ;
                shareObjData = {
                    mediaUrl: mediaUrl
                };
                break;
            case 5:
                shareObjData = {
                    miniProgram: {
                        ...miniProgramObj,
                        id: miniProgramId,
                        type: miniProgramShareType
                    },
                    imageUrl: imageUrl
                };
                providerName = 'weixin';
                break;
            default:
                _this.showToast('分享参数-shareType错误');
                return;
                break;
        }
        shareObjData.title = title;
        _this.share(providerName, WXScene, shareType, shareObjData, function (res) {
            if (scb && typeof (scb) == 'function') scb(res);
        }, function (err) {
            if (fcb && typeof (fcb) == 'function') fcb(err);
        });
    },
    share (providerName, WXScene, shareType, data, scb, fcb) {
        let _this = this;
        let shareObj = {
            provider: '',
            success: Function,
            fail: Function
        };
        if (providerName && providerName != '') {
            shareObj.provider = providerName;
            if (providerName == 'weixin') {
                _this.readyShareWXScene(WXScene, function (Scene) {
                    shareObj.scene = Scene;
                    _this.doingShare(shareObj, shareType, data, scb, fcb);
                });
            } else {
                _this.doingShare(shareObj, shareType, data, scb, fcb);
            }
        } else {
            _this.getProvider('share', function (name) {
                shareObj.provider = name;
                if (name == 'weixin') {
                    _this.readyShareWXScene(WXScene, function (Scene) {
                        shareObj.scene = Scene;
                        _this.doingShare(shareObj, shareType, data, scb, fcb);
                    });
                } else {
                    _this.doingShare(shareObj, shareType, data, scb, fcb);
                }
            }, true);
        }
    },
    readyShareWXScene (WXScene, cb) {
        let _this = this;
        let WXScenetypelist = {
            array: ['WXSceneSession', 'WXSenceTimeline', 'WXSceneFavorite']
        };
        if (WXScene && WXScene != "") {
            if (cb && typeof (cb) == 'function') cb(WXScene);
        } else {
            _this.actionSheet(WXScenetypelist, function (index) {
                if (cb && typeof (cb) == 'function') cb(WXScenetypelist.array[index]);
            });
        }
    },
    doingShare (shareObj, shareType, data, scb, fcb) {
        shareObj.type = shareType;
        if (data && data.title) shareObj.title = data.title;
        switch (shareType) {
            case 0: //图文链接
                shareObj.href = data.href;
                shareObj.summary = data.summary;
                shareObj.imageUrl = data.imageUrl;
                break;
            case 1: //纯文字
                shareObj.summary = data.summary;
                shareObj.href = data.href;
                break;
            case 2: //纯图片
                shareObj.imageUrl = data.imageUrl;
                break;
            case 3: //音乐
                if (!data.mediaUrl) {
                    _this.showToast('暂不支持此分享类型');
                    return;
                }
                ;
                shareObj.mediaUrl = data.mediaUrl;
                break;
            case 4: //视频
                if (!data.mediaUrl) {
                    _this.showToast('暂不支持此分享类型');
                    return;
                }
                ;
                shareObj.mediaUrl = data.mediaUrl;
                break;
            case 5: //小程序
                if (miniProgramId == '') {
                    uni.showToast('未设置小程序ID, 请使用其他方式分享');
                    return;
                }
                let mp = {
                    id: miniProgramId
                };
                mp.path = data.miniProgram.path;
                mp.type = data.miniProgram.type;
                if (data.miniProgram.webUrl) mp.webUrl = data.miniProgram.webUrl;
                shareObj.miniProgram = mp;
                shareObj.imageUrl = data.imageUrl;
                break;
            default:
                appJS.showToast('分享参数-shareType错误');
                break;
        }
        shareObj.success = function (res) {
            if (scb && typeof (scb) == 'function') scb(res);
        }
        shareObj.fail = function (err) {
            if (fcb && typeof (fcb) == 'function') fcb(err);
        }
        log(JSON.stringify(shareObj));
        uni.share(shareObj);
    },
    // #endif
}

function checkMPUrl (url) {
    // #ifdef MP
    if (
        url.substring(0, 4) === 'http' &&
        url.substring(0, 12) !== 'http://store' &&
        url.substring(0, 10) !== 'http://tmp' &&
        url.substring(0, 5) !== 'https'
    ) {
        url = 'https' + url.substring(4, url.length);
    }
    // #endif
    return url;
}

module.exports = _app;
